package com.mask.im.business.model.entity.chat;

import com.baomidou.mybatisplus.annotation.*;

import java.io.Serializable;
import java.util.Date;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 聊天列表实体
 *
 * @author jian
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("im_chat_list")
public class IMChatListDO implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 当前用户ID（列表所有者）
     */
    @TableField("user_id")
    private Long userId;

    /**
     * 聊天类型：1=单聊（好友），2=群聊，3=系统通知，4=公众号消息
     */
    @TableField("chat_type")
    private Integer chatType;

    /**
     * 目标ID：单聊=好友ID，群聊=群ID，通知=通知源ID
     */
    @TableField("target_id")
    private Long targetId;

    /**
     * 原始名称：好友昵称/群名/公众号名
     */
    @TableField("original_name")
    private String originalName;

    /**
     * 用户自定义备注
     */
    @TableField("custom_remark")
    private String customRemark;

    /**
     * 展示名称（生成列，无需手动设置）
     */
    @TableField(value = "display_name", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)
    private String displayName;

    /**
     * 聊天头像URL
     */
    @TableField("chat_avatar")
    private String chatAvatar;

    /**
     * 最新消息内容摘要
     */
    @TableField("latest_message")
    private String latestMessage;

    /**
     * 最新消息ID（关联消息表）
     */
    @TableField("latest_message_id")
    private Long latestMessageId;

    /**
     * 最新消息时间
     */
    @TableField("latest_time")
    private Date latestTime;

    /**
     * 最新消息类型：0=文本，1=图片，2=文件
     */
    @TableField("message_type")
    private Integer messageType;

    /**
     * 未读消息数
     */
    @TableField("unread_count")
    private Integer unreadCount;

    /**
     * 是否置顶：0=否，1=是
     */
    @TableField("is_top")
    private Integer isTop;

    /**
     * 是否静音：0=否，1=是
     */
    @TableField("is_muted")
    private Integer isMuted;

    /**
     * 是否删除列表项：0=未删除，1=已删除
     */
    @TableField("is_deleted")
    private Integer isDeleted;

    /**
     * 列表项创建时间
     */
    @TableField("create_time")
    private Date createTime;

    /**
     * 列表项更新时间
     */
    @TableField("update_time")
    private Date updateTime;
}
